package org.dao;

import org.model.User;
import org.util.Sha1;

import java.io.IOException;

/**
 * Created by tedzy on 2015/5/11.
 * 用户数据访问对象
 */
public interface UserDao {
    /**
     * 登录检查。使用用户名和密码查询用户是否登录。
     * @param username 用户名
     * @param password 密码
     * @return 成功返回用户信息对象，失败返回null
     */
    User checkLogin(String username, String password);

    /**
     * 获取用户名。
     * @param uid 用户的id。
     * @return 该uid对应的用户名。如果没有这个用户，将返回null
     */
    String getUsername(int uid);

    /**
     * 获取用户信息。
     * @param uid 用户的id
     * @return 该uid对应的用户信息对象，失败返回null
     */
    User getUser(int uid);

    /**
     * 修改密码。
     * 注：该函数在非管理员访问的时候，uid必须用session中获取。
     * @param uid 用户的id
     * @param newPassword 新密码
     * @return 修改成功，返回true。失败返回false
     */
    boolean changePassword(int uid, String newPassword);

    /**
     * 添加用户。
     * @param user 待注册用户的信息。org.model.User 类
     * @return 成功返回true，失败返回false
     */
    boolean addUser(User user);

    /**
     * 密码加密
     * @param password 待转换密码
     * @return 转换结果，如果失败则返回null
     */
    static String encryptPassword(String password){
        String result = null;
        try {
            result =  Sha1.getSha1("$*Sjofi3214" + password + "esfa23412");
        } catch (IOException e) {
            return null;
        }
        return result;
    }

    /**
     * 用户名计数：返回用户名在数据库中的个数，用于防止同一用户名被注册多次
     * @param username 用户名
     * @return 数据库中该用户名的个数，正常值为0或1。
     */
    int countUsername(String username);

    void update(User user);

}
